dag_name: template_configs
description: DAG используется для генерации конфигов типа `templated_file`
status: ready (нужен тест?)
doc_status: ready
type: dag
template_configs
DAG используется для генерации конфигов типа templated_file
(см. Configs > Список конфигов). Он дает возможность задать и конфиг по умолчанию, который будет работать без какой-то настройки от пользователя, и кастомный конфиг для конкретного проекта. DAG генерирует файлы конфигов в папке templated_configs
внутри проекта dbt по следующим правилам:
{название конфига}_manual.yaml
(или .json
), то конфиг создается путем создания символической ссылки на негоtemplated_configs
, но уже не проекта dbt, а репозитория самого dataCraft Core.Можно также задавать несколько версий файлов по умолчанию. Для этого в папке templated_configs
репозитория создается несколько файлов с разными суффиксами в конце, например, metadata.yml
, metadata_v2.yml
. Пользователь может указать, какую версию следует использовать с помощью указания пути (см. Configs > Метаконфиги).
Кроме файла в папке templated_configs
, для использования внутри dbt также создается макрос, который возвращает содержимое конфига.
Проверяем, что в проекте dbt существует папка templated_configs
, а если не существует — создаем ее.
Все конфиги, которые в таблице Configs > Список конфигов помечены как templated_file
, независимо от значения метаконфигов.
prepare
[{"name": "connectors", "source": "file", "file_path": "/path/to/datacraft/templated_configs/connectors.yml", "format": "yml", "symlink": false},
{"name": "presets", "source": "file", "file_path": "presets_manual.yml", "format": "json", "symlink": "true"},
{"name": "metadata", "source": "airflow_variable", "variable_name": "my_metadata", "format": "yml"},
...
]
prepare
format
берем из метаконфига, если есть.source == "other_variable"
, то в source
прописываем airflow_variable
.source == "datacraft_variable"
не поддерживается, поэтому генерируем ошибку при такой комбинации.source
в file
.source == "file"
, то source
берем из пути метаконфига. source == "templated_file"
, то смотрим наличие файла {название конфига}_manual.{format}
, если он существует — берем его в качестве file
и ставим symlink
в true
, если нет, то {путь до пакета datacraft}/templated_files/{название конфига}{путь из метаконфига, если есть}{.format}
и symlink
в false
.templated_files
проекта dbt файл с названием {name}.{format}
.source == "airflow_variable"
, то копируем значение соответствующей переменной в файл {name}.{format}
.source == "file"
и symlink == false
, то копируем файл file_path
в {name}.{format}
. Если же symlink == true
, то делаем символическую ссылку вместо копирования.macros/templated_files
проекта dbt создаем файл {название конфига}.sql
по шаблону:{%- macro название_конфига_data() -%}
содержимое файла, созданного выше
{%- endmacro -%}
{%- macro название_конфига() -%}
fromyaml или fromjson(название_конфига_data())
{%- endmacro -%}
DAG запускается перед запуском всех остальных DAG’ов, так как его работа влияет на них через функцию get_configs(...)
(см. Configs > Конфигурация > Функция `get_configs(...)`).